Imports System.Data.SqlClient
''' <nombre>
''' Tercero
''' </nombre>
Public Class cls_tercero_

    Implements ICloneable

#Region "Variables ..."
    Private int_idtercero As Integer = 0
    Private str_nombres As String = ""
    Private str_apellido As String = ""
    Private str_web As String = ""
    Private str_observaciones As String = ""
    Private str_notas As String = ""
    Private str_horario As String = ""
    Private int_idtipodocumento As Integer = 0
    Private str_numeroducumento As String = ""
    Private int_idcondicioniva As Integer = 0
    Private str_numerofiscal As String = ""
    Private int_tipo As enu_tipotercero = enu_tipotercero.Nulo
    Private int_idregistro As Integer = 0
    Private int_idagrupacion As Integer = 0
    Private str_subcodigo1 As String = ""
    Private str_subcodigo2 As String = ""
    Private str_subcodigo3 As String = ""

    Private obj_direccionprimario As cls_direccion_ = Nothing
    Private obj_telefonoprimario As cls_telefono_ = Nothing
    Private obj_emailprimario As cls_email_ = Nothing
    Private obj_agrupacion As cls_agrupacion_ = Nothing

    Private obj_tercerosubcategoria_ As cls_tercerosubcategoria_ = Nothing
    Private obj_usuario_ As cls_usuario_ = Nothing
    Private obj_email_ As cls_email_ = Nothing
    Private obj_tercerorelacion_ As cls_tercerorelacion_ = Nothing
    Private obj_direccion_ As cls_direccion_ = Nothing
    Private obj_telefono_ As cls_telefono_ = Nothing
    Private obj_tipodocumento As cls_tipodocumento_ = Nothing
    Private obj_condicioniva As cls_condicioniva_ = Nothing
    Private obj_registro As cls_registro_ = Nothing
    Private obj_terceroagrupacion_ As cls_terceroagrupacion_ = Nothing

    Private obj_asiento_ As cls_asiento_ = Nothing

    Private col_Items As Collections.Generic.List(Of cls_tercero_) = Nothing
#End Region

    Public Enum enu_tipotercero
        Nulo = 0
        Proveedor = 1
        Cliente = 2
        Persona = 3
        Personal = 4
        Usuario = 5
        Vendedor = 6
        Cobrador = 7
        Transporte = 8
        Banco = 9
    End Enum

    Public Overrides Function ToString() As String
        If nombres = "" Then
            Return apellido
        End If
        If apellido = "" Then
            Return nombres
        End If
        Return apellido & " " & nombres
    End Function

#Region "Propiedades ..."
    ReadOnly Property This
        Get
            Return Me
        End Get
    End Property
    ReadOnly Property ThisDescripcion As String
        Get
            Return Me.ToString
        End Get
    End Property
    ReadOnly Property pKey
        Get
            Return idtercero
        End Get
    End Property
    ''' <id>
    ''' true
    ''' </id>
    Property idtercero() As Integer
        Get
            idtercero = int_idtercero
        End Get
        Set(ByVal value As Integer)
            int_idtercero = value
        End Set
    End Property
    ''' <nombre>
    ''' Nombre/s
    ''' </nombre>
    Property nombres() As String
        Get
            nombres = str_nombres
        End Get
        Set(ByVal value As String)
            str_nombres = value
        End Set
    End Property
    ''' <nombre>
    ''' Apellido
    ''' </nombre>
    Property apellido() As String
        Get
            apellido = str_apellido
        End Get
        Set(ByVal value As String)
            str_apellido = value
        End Set
    End Property
    ''' <nombre>
    ''' Sitio Web
    ''' </nombre>
    Property web() As String
        Get
            web = str_web
        End Get
        Set(ByVal value As String)
            str_web = value
        End Set
    End Property
    ''' <nombre>
    ''' Observaciones
    ''' </nombre>
    Property observaciones() As String
        Get
            observaciones = str_observaciones
        End Get
        Set(ByVal value As String)
            str_observaciones = value
        End Set
    End Property
    ''' <nombre>
    ''' Notas
    ''' </nombre>
    Property notas() As String
        Get
            notas = str_notas
        End Get
        Set(ByVal value As String)
            str_notas = value
        End Set
    End Property
    ''' <nombre>
    ''' Horario
    ''' </nombre>
    Property horario() As String
        Get
            horario = str_horario
        End Get
        Set(ByVal value As String)
            str_horario = value
        End Set
    End Property
    ''' <nombre>
    ''' Identificador
    ''' </nombre>
    Property idtipodocumento() As Integer
        Get
            idtipodocumento = int_idtipodocumento
        End Get
        Set(ByVal value As Integer)
            int_idtipodocumento = value
        End Set
    End Property
    ''' <nombre>
    ''' Numero de Documento
    ''' </nombre>
    Property numeroducumento() As String
        Get
            numeroducumento = str_numeroducumento
        End Get
        Set(ByVal value As String)
            str_numeroducumento = value
        End Set
    End Property
    ''' <nombre>
    ''' Identificador
    ''' </nombre>
    Property idcondicioniva() As Integer
        Get
            idcondicioniva = int_idcondicioniva
        End Get
        Set(ByVal value As Integer)
            int_idcondicioniva = value
        End Set
    End Property
    ''' <nombre>
    ''' Numero Fiscal
    ''' </nombre>
    Property numerofiscal() As String
        Get
            numerofiscal = str_numerofiscal
        End Get
        Set(ByVal value As String)
            str_numerofiscal = value
        End Set
    End Property
    Property tipo() As enu_tipotercero
        Get
            tipo = int_tipo
        End Get
        Set(ByVal value As enu_tipotercero)
            int_tipo = value
        End Set
    End Property
    Property idregistro() As Integer
        Get
            idregistro = int_idregistro
        End Get
        Set(ByVal value As Integer)
            int_idregistro = value
        End Set
    End Property
    Property idagrupacion As Integer
        Get
            idagrupacion = int_idagrupacion
        End Get
        Set(ByVal value As Integer)
            int_idagrupacion = value
        End Set
    End Property
    Property subcodigo1 As String
        Get
            subcodigo1 = str_subcodigo1
        End Get
        Set(value As String)
            str_subcodigo1 = value
        End Set
    End Property

    Property subcodigo2 As String
        Get
            subcodigo2 = str_subcodigo2
        End Get
        Set(value As String)
            str_subcodigo2 = value
        End Set
    End Property
    Property subcodigo3 As String
        Get
            subcodigo3 = str_subcodigo3
        End Get
        Set(value As String)
            str_subcodigo3 = value
        End Set
    End Property


    Property registro() As cls_registro_
        Get
            If IsNothing(obj_registro) Then
                obj_registro = New cls_registro_
                If Not obj_registro.Buscar(idregistro) Then
                    obj_registro = Nothing
                End If
            End If
            registro = obj_registro
        End Get
        Set(ByVal value As cls_registro_)
            obj_registro = value
        End Set
    End Property
    Property agrupacion() As cls_agrupacion_
        Get
            If IsNothing(obj_agrupacion) Then
                obj_agrupacion = New cls_agrupacion_
                If Not obj_agrupacion.Buscar(idagrupacion) Then
                    obj_agrupacion = Nothing
                End If
            End If
            agrupacion = obj_agrupacion
        End Get
        Set(ByVal value As cls_agrupacion_)
            obj_agrupacion = value
        End Set
    End Property

    Property emailprimario() As cls_email_
        Get
            If IsNothing(obj_emailprimario) Then
                obj_emailprimario = New cls_email_
                If Not obj_emailprimario.CargarXidterceroprimario(idtercero) Then
                    obj_emailprimario = Nothing
                End If
            End If
            emailprimario = obj_emailprimario
        End Get
        Set(ByVal value As cls_email_)
            obj_emailprimario = value
        End Set
    End Property

    Property direccionprimario() As cls_direccion_
        Get
            If IsNothing(obj_direccionprimario) Then
                obj_direccionprimario = New cls_direccion_
                If Not obj_direccionprimario.CargarXidterceroprimario(idtercero) Then
                    obj_direccionprimario = Nothing
                End If
            End If
            direccionprimario = obj_direccionprimario
        End Get
        Set(ByVal value As cls_direccion_)
            obj_direccionprimario = value
        End Set
    End Property

    Property telefonoprimario() As cls_telefono_
        Get
            If IsNothing(obj_telefonoprimario) Then
                obj_telefonoprimario = New cls_telefono_
                If Not obj_telefonoprimario.CargarXidterceroprimario(idtercero) Then
                    obj_telefonoprimario = Nothing
                End If
            End If
            telefonoprimario = obj_telefonoprimario
        End Get
        Set(ByVal value As cls_telefono_)
            obj_telefonoprimario = value
        End Set
    End Property
    ''' <importar>
    ''' True
    ''' </importar>
    Property condicioniva() As cls_condicioniva_
        Get
            If IsNothing(obj_condicioniva) Then
                obj_condicioniva = New cls_condicioniva_
                If Not obj_condicioniva.Buscar(idcondicioniva) Then
                    obj_condicioniva = Nothing
                End If
            End If
            condicioniva = obj_condicioniva
        End Get
        Set(ByVal value As cls_condicioniva_)
            obj_condicioniva = value
        End Set
    End Property
    ''' <importar>
    ''' True
    ''' </importar>
    Property tipodocumento() As cls_tipodocumento_
        Get
            If IsNothing(obj_tipodocumento) Then
                obj_tipodocumento = New cls_tipodocumento_
                If Not obj_tipodocumento.Buscar(idtipodocumento) Then
                    obj_tipodocumento = Nothing
                End If
            End If
            tipodocumento = obj_tipodocumento
        End Get
        Set(ByVal value As cls_tipodocumento_)
            obj_tipodocumento = value
        End Set
    End Property

    Property tercerosubcategoria_() As cls_tercerosubcategoria_
        Get
            If IsNothing(obj_tercerosubcategoria_) Then
                obj_tercerosubcategoria_ = New cls_tercerosubcategoria_
                If Not obj_tercerosubcategoria_.CargarXidtercero(idtercero) Then
                    obj_tercerosubcategoria_ = Nothing
                End If
            End If
            tercerosubcategoria_ = obj_tercerosubcategoria_
        End Get
        Set(ByVal value As cls_tercerosubcategoria_)
            obj_tercerosubcategoria_ = value
        End Set
    End Property
    Property asiento_() As cls_asiento_
        Get
            If IsNothing(obj_asiento_) Then
                obj_asiento_ = New cls_asiento_
                If Not obj_asiento_.CargarXidtercero(idtercero) Then
                    obj_asiento_ = Nothing
                End If
            End If
            asiento_ = obj_asiento_
        End Get
        Set(ByVal value As cls_asiento_)
            obj_asiento_ = value
        End Set
    End Property
    ''' <importar>
    ''' True
    ''' </importar>
    Property direccion_() As cls_direccion_
        Get
            If IsNothing(obj_direccion_) Then
                obj_direccion_ = New cls_direccion_
                If Not obj_direccion_.CargarXidtercero(idtercero) Then
                    obj_direccion_ = Nothing
                End If
            End If
            direccion_ = obj_direccion_
        End Get
        Set(ByVal value As cls_direccion_)
            obj_direccion_ = value
        End Set
    End Property
    ''' <importar>
    ''' True
    ''' </importar>
    Property telefono_() As cls_telefono_
        Get
            If IsNothing(obj_telefono_) Then
                obj_telefono_ = New cls_telefono_
                If Not obj_telefono_.CargarXidtercero(idtercero) Then
                    obj_telefono_ = Nothing
                End If
            End If
            telefono_ = obj_telefono_
        End Get
        Set(ByVal value As cls_telefono_)
            obj_telefono_ = value
        End Set
    End Property

    Property usuario_() As cls_usuario_
        Get
            If IsNothing(obj_usuario_) Then
                obj_usuario_ = New cls_usuario_
                If Not obj_usuario_.CargarXidtercero(idtercero) Then
                    obj_usuario_ = Nothing
                End If
            End If
            usuario_ = obj_usuario_
        End Get
        Set(ByVal value As cls_usuario_)
            obj_usuario_ = value
        End Set
    End Property

    Property tercerorelacion_() As cls_tercerorelacion_
        Get
            If IsNothing(obj_tercerorelacion_) Then
                obj_tercerorelacion_ = New cls_tercerorelacion_
                If Not obj_tercerorelacion_.CargarXidtercero(idtercero) Then
                    obj_tercerorelacion_ = Nothing
                End If
            End If
            tercerorelacion_ = obj_tercerorelacion_
        End Get
        Set(ByVal value As cls_tercerorelacion_)
            obj_tercerorelacion_ = value
        End Set
    End Property

    ''' <importar>
    ''' True
    ''' </importar>
    Property email_() As cls_email_
        Get
            If IsNothing(obj_email_) Then
                obj_email_ = New cls_email_
                If Not obj_email_.CargarXidtercero(idtercero) Then
                    obj_email_ = Nothing
                End If
            End If
            email_ = obj_email_
        End Get
        Set(ByVal value As cls_email_)
            obj_email_ = value
        End Set
    End Property

    Property terceroagrupacion_() As cls_terceroagrupacion_
        Get
            If IsNothing(obj_terceroagrupacion_) Then
                obj_terceroagrupacion_ = New cls_terceroagrupacion_
                If Not obj_terceroagrupacion_.CargarXidtercero(idtercero) Then
                    obj_terceroagrupacion_ = Nothing
                End If
            End If
            terceroagrupacion_ = obj_terceroagrupacion_
        End Get
        Set(ByVal value As cls_terceroagrupacion_)
            obj_terceroagrupacion_ = value
        End Set
    End Property

    Property Items() As Collections.Generic.List(Of cls_tercero_)
        Get
            Items = col_Items
        End Get
        Set(ByVal value As Collections.Generic.List(Of cls_tercero_))
            col_Items = value
        End Set
    End Property
#End Region

    Private Sub CargarColeccion(ByVal obj_Reader As SqlDataReader)
        col_Items = New Collections.Generic.List(Of cls_tercero_)
        While obj_Reader.Read()
            Dim Elemento As New cls_tercero_
            Elemento.int_idtercero = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercero")))

            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("nombres"))) = False Then
                Elemento.str_nombres = (obj_Reader.GetValue(obj_Reader.GetOrdinal("nombres")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("apellido"))) = False Then
                Elemento.str_apellido = (obj_Reader.GetValue(obj_Reader.GetOrdinal("apellido")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("web"))) = False Then
                Elemento.str_web = (obj_Reader.GetValue(obj_Reader.GetOrdinal("web")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("observaciones"))) = False Then
                Elemento.str_observaciones = (obj_Reader.GetValue(obj_Reader.GetOrdinal("observaciones")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("notas"))) = False Then
                Elemento.str_notas = (obj_Reader.GetValue(obj_Reader.GetOrdinal("notas")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("horario"))) = False Then
                Elemento.str_horario = (obj_Reader.GetValue(obj_Reader.GetOrdinal("horario")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idtipodocumento"))) = False Then
                Elemento.int_idtipodocumento = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idtipodocumento")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("numeroducumento"))) = False Then
                Elemento.str_numeroducumento = (obj_Reader.GetValue(obj_Reader.GetOrdinal("numeroducumento")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idcondicioniva"))) = False Then
                Elemento.int_idcondicioniva = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idcondicioniva")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("numerofiscal"))) = False Then
                Elemento.str_numerofiscal = (obj_Reader.GetValue(obj_Reader.GetOrdinal("numerofiscal")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("tipo"))) = False Then
                Elemento.int_tipo = (obj_Reader.GetValue(obj_Reader.GetOrdinal("tipo")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idregistro"))) = False Then
                Elemento.int_idregistro = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idregistro")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idagrupacion"))) = False Then
                Elemento.int_idagrupacion = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idagrupacion")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("subcodigo1"))) = False Then
                Elemento.str_subcodigo1 = (obj_Reader.GetValue(obj_Reader.GetOrdinal("subcodigo1")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("subcodigo2"))) = False Then
                Elemento.str_subcodigo2 = (obj_Reader.GetValue(obj_Reader.GetOrdinal("subcodigo2")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("subcodigo3"))) = False Then
                Elemento.str_subcodigo3 = (obj_Reader.GetValue(obj_Reader.GetOrdinal("subcodigo3")))
            End If
            col_Items.Add(Elemento)
        End While
    End Sub

    Public Sub CargarVariables(ByVal obj_Reader As SqlDataReader, Optional read As Boolean = True)
        Dim tabla As String = ""
        If read Then
            obj_Reader.Read()
        Else
            tabla = "tercero_"
        End If
        int_idtercero = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "idtercero")))

        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "nombres"))) = False Then
            str_nombres = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "nombres")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "apellido"))) = False Then
            str_apellido = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "apellido")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "web"))) = False Then
            str_web = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "web")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "observaciones"))) = False Then
            str_observaciones = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "observaciones")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "notas"))) = False Then
            str_notas = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "notas")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "horario"))) = False Then
            str_horario = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "horario")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "idtipodocumento"))) = False Then
            int_idtipodocumento = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "idtipodocumento")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "numeroducumento"))) = False Then
            str_numeroducumento = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "numeroducumento")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "idcondicioniva"))) = False Then
            int_idcondicioniva = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "idcondicioniva")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "numerofiscal"))) = False Then
            str_numerofiscal = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "numerofiscal")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "tipo"))) = False Then
            int_tipo = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "tipo")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "idregistro"))) = False Then
            int_idregistro = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "idregistro")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "idagrupacion"))) = False Then
            int_idagrupacion = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "idagrupacion")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "subcodigo1"))) = False Then
            str_subcodigo1 = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "subcodigo1")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "subcodigo2"))) = False Then
            str_subcodigo2 = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "subcodigo2")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "subcodigo3"))) = False Then
            str_subcodigo3 = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "subcodigo3")))
        End If

        If Not read Then
            condicioniva = New cls_condicioniva_
            condicioniva.CargarVariables(obj_Reader, False)

            tipodocumento = New cls_tipodocumento_
            tipodocumento.CargarVariables(obj_Reader, False)

            telefonoprimario = New cls_telefono_
            telefonoprimario.CargarVariables(obj_Reader, False)

            direccionprimario = New cls_direccion_
            direccionprimario.CargarVariables(obj_Reader, False)

            emailprimario = New cls_email_
            emailprimario.CargarVariables(obj_Reader, False)
        End If

    End Sub

    Public Function Nuevo() As Boolean
        Nuevo = False
        Dim obj_Conexion As New cls_Conexion
        Try
            'Creacion de registro----------------------------------------------------
            If IsNothing(registro) Then
                registro = New cls_registro_
                registro.fechacreado = Now
                registro.idusuariocreado = UsuarioLOG.idusuario
                registro.fechamodificado = Now
                registro.idusuariomodificado = UsuarioLOG.idusuario
                registro.idregistroestado = 1
                registro.idusuarioregistroestado = UsuarioLOG.idusuario
                registro.Nuevo(True)
                idregistro = obj_registro.idregistro
            Else
                If registro.idregistro <> 0 Then
                    registro.Modificar()
                Else
                    registro.Nuevo(True)
                End If

                idregistro = registro.idregistro
            End If
            '------------------------------------------------------------------------

            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "tercero__Nuevo"
                .Parameters.Add("@nombres", SqlDbType.NVarChar).Value = str_nombres
                .Parameters.Add("@apellido", SqlDbType.NVarChar).Value = str_apellido
                .Parameters.Add("@web", SqlDbType.NVarChar).Value = str_web
                .Parameters.Add("@observaciones", SqlDbType.NVarChar).Value = str_observaciones
                .Parameters.Add("@notas", SqlDbType.NVarChar).Value = str_notas
                .Parameters.Add("@horario", SqlDbType.NVarChar).Value = str_horario
                .Parameters.Add("@idtipodocumento", SqlDbType.Int).Value = int_idtipodocumento
                .Parameters.Add("@numeroducumento", SqlDbType.NVarChar).Value = str_numeroducumento
                .Parameters.Add("@idcondicioniva", SqlDbType.Int).Value = IIf(int_idcondicioniva = 0, DBNull.Value, int_idcondicioniva)
                .Parameters.Add("@numerofiscal", SqlDbType.NVarChar).Value = str_numerofiscal
                .Parameters.Add("@tipo", SqlDbType.Int).Value = int_tipo
                .Parameters.Add("@idregistro", SqlDbType.Int).Value = int_idregistro
                .Parameters.Add("@idagrupacion", SqlDbType.Int).Value = IIf(int_idagrupacion = 0, DBNull.Value, int_idagrupacion)
                .Parameters.Add("@subcodigo1", SqlDbType.NVarChar).Value = str_subcodigo1
                .Parameters.Add("@subcodigo2", SqlDbType.NVarChar).Value = str_subcodigo2
                .Parameters.Add("@subcodigo3", SqlDbType.NVarChar).Value = str_subcodigo3
                .ExecuteNonQuery()
            End With
            Nuevo = True
            CargarUltimo()

            'Creacion de Direcciones--------------------------------------------------
            Dim existePrimaria As Boolean = False
            If Not IsNothing(direccion_) Then
                If Not IsNothing(direccion_.Items) Then
                    For Each direccion As cls_direccion_ In direccion_.Items
                        If direccion.primario Then
                            existePrimaria = True
                            Exit For
                        End If
                    Next
                    For Each direccion As cls_direccion_ In direccion_.Items
                        If Not existePrimaria Then
                            direccion.primario = True
                            existePrimaria = True
                        End If
                        direccion.idtercero = idtercero
                        direccion.Nuevo(True)
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

            'Creacion de Telefonos--------------------------------------------------
            existePrimaria = False
            If Not IsNothing(telefono_) Then
                If Not IsNothing(telefono_.Items) Then
                    For Each telefono As cls_telefono_ In telefono_.Items
                        If telefono.primario Then
                            existePrimaria = True
                            Exit For
                        End If
                    Next
                    For Each telefono As cls_telefono_ In telefono_.Items
                        If Not existePrimaria Then
                            telefono.primario = True
                            existePrimaria = True
                        End If

                        telefono.idtercero = idtercero
                        telefono.Nuevo(True)
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

            'Creacion de relaciones--------------------------------------------------
            If Not IsNothing(tercerorelacion_) Then
                If Not IsNothing(tercerorelacion_.Items) Then
                    For Each tercerorelacion As cls_tercerorelacion_ In tercerorelacion_.Items
                        tercerorelacion.idtercero = idtercero
                        tercerorelacion.Nuevo(True)
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

            'Creacion de email--------------------------------------------------
            existePrimaria = False
            If Not IsNothing(email_) Then
                If Not IsNothing(email_.Items) Then
                    For Each email As cls_email_ In email_.Items
                        If email.primario Then
                            existePrimaria = True
                            Exit For
                        End If
                    Next
                    For Each email As cls_email_ In email_.Items
                        If Not existePrimaria Then
                            email.primario = True
                            existePrimaria = True
                        End If

                        email.idtercero = idtercero
                        email.Nuevo(True)
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

            'Creacion de usuario--------------------------------------------------
            If Not IsNothing(usuario_) Then
                If Not IsNothing(usuario_.Items) Then
                    For Each usuario As cls_usuario_ In usuario_.Items
                        usuario.idtercero = idtercero
                        usuario.Nuevo(True)
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

            'Creacion de tercerosubcategorias--------------------------------------------------
            If Not IsNothing(tercerosubcategoria_) Then
                If Not IsNothing(tercerosubcategoria_.Items) Then
                    For Each tercerosubcategoria As cls_tercerosubcategoria_ In tercerosubcategoria_.Items
                        tercerosubcategoria.idtercero = idtercero
                        tercerosubcategoria.Nuevo(True)
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

            'Creacion de tercerosubcategorias--------------------------------------------------
            If Not IsNothing(terceroagrupacion_) Then
                If Not IsNothing(terceroagrupacion_.Items) Then
                    For Each terceroagrupacion As cls_terceroagrupacion_ In terceroagrupacion_.Items
                        terceroagrupacion.idtercero = idtercero
                        terceroagrupacion.Nuevo(True)
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Crear el registro de tercero_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Function

    Public Sub Modificar()
        Dim obj_Conexion As New cls_Conexion
        Try
            'Modificacion de registro------------------------------------------------
            registro.fechamodificado = Now : registro.idusuariomodificado = UsuarioLOG.idusuario
            registro.Modificar()
            '------------------------------------------------------------------------

            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "tercero__Modificar"
                .Parameters.Add("@idtercero", SqlDbType.Int).Value = int_idtercero
                .Parameters.Add("@nombres", SqlDbType.NVarChar).Value = str_nombres
                .Parameters.Add("@apellido", SqlDbType.NVarChar).Value = str_apellido
                .Parameters.Add("@web", SqlDbType.NVarChar).Value = str_web
                .Parameters.Add("@observaciones", SqlDbType.NVarChar).Value = str_observaciones
                .Parameters.Add("@notas", SqlDbType.NVarChar).Value = str_notas
                .Parameters.Add("@horario", SqlDbType.NVarChar).Value = str_horario
                .Parameters.Add("@idtipodocumento", SqlDbType.Int).Value = int_idtipodocumento
                .Parameters.Add("@numeroducumento", SqlDbType.NVarChar).Value = str_numeroducumento
                .Parameters.Add("@idcondicioniva", SqlDbType.Int).Value = IIf(int_idcondicioniva = 0, DBNull.Value, int_idcondicioniva)
                .Parameters.Add("@numerofiscal", SqlDbType.NVarChar).Value = str_numerofiscal
                .Parameters.Add("@tipo", SqlDbType.Int).Value = int_tipo
                .Parameters.Add("@idregistro", SqlDbType.Int).Value = int_idregistro
                .Parameters.Add("@idagrupacion", SqlDbType.Int).Value = IIf(int_idagrupacion = 0, DBNull.Value, int_idagrupacion)
                .Parameters.Add("@subcodigo1", SqlDbType.NVarChar).Value = str_subcodigo1
                .Parameters.Add("@subcodigo2", SqlDbType.NVarChar).Value = str_subcodigo2
                .Parameters.Add("@subcodigo3", SqlDbType.NVarChar).Value = str_subcodigo3
                .ExecuteNonQuery()
            End With

            'Creacion/modificacion de Direcciones-------------------------------------
            Dim existePrimaria As Boolean = False
            If Not IsNothing(direccion_) Then
                If Not IsNothing(direccion_.Items) Then
                    For Each direccion As cls_direccion_ In direccion_.Items
                        If direccion.primario Then
                            existePrimaria = True
                            Exit For
                        End If
                    Next
                    For Each direccion As cls_direccion_ In direccion_.Items
                        If Not existePrimaria Then
                            direccion.primario = True
                            existePrimaria = True
                        End If

                        If direccion.iddireccion = 0 Then
                            direccion.idtercero = idtercero
                            direccion.Nuevo(True)
                        Else
                            direccion.Modificar()
                        End If
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

            'Creacion/modificacion de Telefonos-------------------------------------
            existePrimaria = False
            If Not IsNothing(telefono_) Then
                If Not IsNothing(telefono_.Items) Then
                    For Each telefono As cls_telefono_ In telefono_.Items
                        If telefono_.primario Then
                            existePrimaria = True
                            Exit For
                        End If
                    Next
                    For Each telefono As cls_telefono_ In telefono_.Items
                        If Not existePrimaria Then
                            telefono.primario = True
                            existePrimaria = True
                        End If

                        If telefono.idtelefono = 0 Then
                            telefono.idtercero = idtercero
                            telefono.Nuevo(True)
                        Else
                            telefono.Modificar()
                        End If
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

            'Creacion/modificacion de Relaciones-------------------------------------
            If Not IsNothing(tercerorelacion_) Then
                If Not IsNothing(tercerorelacion_.Items) Then
                    For Each tercerorelacion As cls_tercerorelacion_ In tercerorelacion_.Items
                        If tercerorelacion.idtercerorelacion = 0 Then
                            tercerorelacion.idtercero = idtercero
                            tercerorelacion.Nuevo(True)
                        Else
                            tercerorelacion.Modificar()
                        End If
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

            'Creacion/modificacion de email-------------------------------------
            existePrimaria = False
            If Not IsNothing(email_) Then
                If Not IsNothing(email_.Items) Then
                    For Each email As cls_email_ In email_.Items
                        If email.primario Then
                            existePrimaria = True
                            Exit For
                        End If
                    Next
                    For Each email As cls_email_ In email_.Items
                        If Not existePrimaria Then
                            email.primario = True
                            existePrimaria = True
                        End If

                        If email.idemail = 0 Then
                            email.idtercero = idtercero
                            email.Nuevo(True)
                        Else
                            email.Modificar()
                        End If
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

            'Creacion/modificacion de usuario-------------------------------------
            If Not IsNothing(usuario_) Then
                If Not IsNothing(usuario_.Items) Then
                    For Each usuario As cls_usuario_ In usuario_.Items
                        If usuario.idusuario = 0 Then
                            usuario.idtercero = idtercero
                            usuario.Nuevo(True)
                        Else
                            usuario.Modificar()
                        End If
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

            'Creacion/modificacion de tercerosubcategoria-------------------------------------
            If Not IsNothing(tercerosubcategoria_) Then
                If Not IsNothing(tercerosubcategoria_.Items) Then
                    For Each tercerosubcategoria As cls_tercerosubcategoria_ In tercerosubcategoria_.Items
                        If tercerosubcategoria.idtercerosubcategoria = 0 Then
                            tercerosubcategoria.idtercero = idtercero
                            tercerosubcategoria.Nuevo(True)
                        Else
                            tercerosubcategoria.Modificar()
                        End If
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

            'Creacion/modificacion de terceroagrupacion-------------------------------------
            If Not IsNothing(terceroagrupacion_) Then
                If Not IsNothing(terceroagrupacion_.Items) Then
                    For Each terceroagrupacion As cls_terceroagrupacion_ In terceroagrupacion_.Items
                        If terceroagrupacion.idterceroagrupacion = 0 Then
                            terceroagrupacion.idtercero = idtercero
                            terceroagrupacion.Nuevo(True)
                        Else
                            terceroagrupacion.Modificar()
                        End If
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Modificar el registro de tercero_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Sub Eliminar(ByVal idtercero As Integer)
        Dim obj_Conexion As New cls_Conexion
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "tercero__Eliminar"
                .Parameters.Add("@idtercero", SqlDbType.Int).Value = idtercero
                .ExecuteNonQuery()
            End With
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Eliminar el registro de tercero_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Function Buscar(ByVal idtercero As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            Buscar = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "tercero__Buscar"
                .Parameters.Add("@idtercero", SqlDbType.Int).Value = idtercero
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
                Buscar = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Buscar el registro de tercero_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function BuscarXidagrupacion(ByVal idagrupacion As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            BuscarXidagrupacion = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "tercero__BuscarXidagrupacion"
                .Parameters.Add("@idagrupacion", SqlDbType.Int).Value = idagrupacion
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
                BuscarXidagrupacion = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al BuscarXidagrupacion el registro de tercero_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Sub CargarUltimo()
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "tercero__CargarUltimo"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarUltimo registro de tercero_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Sub

    Public Function CargarTodos() As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarTodos = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "tercero__CargarTodos"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarTodos = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarTodos los registros de tercero_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function saldoAsiento_() As Decimal
        Dim total As Decimal = 0
        If Not IsNothing(asiento_) Then
            If Not IsNothing(asiento_.Items) Then
                For Each asiento As cls_asiento_ In asiento_.Items
                    If asiento.tipoimporte = cls_asiento_.enu_tipoimporte.Ingreso Then
                        total -= asiento.importe
                    Else
                        total += asiento.importe
                    End If
                Next
            End If
        End If
        Return total
    End Function

    Public Function Clone() As Object Implements System.ICloneable.Clone
        Dim obj_tercero_Clon As New cls_tercero_
        obj_tercero_Clon.int_idtercero = Me.int_idtercero
        obj_tercero_Clon.str_nombres = Me.str_nombres
        obj_tercero_Clon.str_apellido = Me.str_apellido
        obj_tercero_Clon.str_web = Me.str_web
        obj_tercero_Clon.str_observaciones = Me.str_observaciones
        obj_tercero_Clon.str_notas = Me.str_notas
        obj_tercero_Clon.str_horario = Me.str_horario
        obj_tercero_Clon.int_idtipodocumento = Me.int_idtipodocumento
        obj_tercero_Clon.str_numeroducumento = Me.str_numeroducumento
        obj_tercero_Clon.int_idcondicioniva = Me.int_idcondicioniva
        obj_tercero_Clon.str_numerofiscal = Me.str_numerofiscal
        obj_tercero_Clon.int_tipo = Me.int_tipo
        obj_tercero_Clon.int_idregistro = Me.int_idregistro
        obj_tercero_Clon.int_idagrupacion = Me.int_idagrupacion
        obj_tercero_Clon.str_subcodigo1 = Me.str_subcodigo1
        obj_tercero_Clon.str_subcodigo2 = Me.str_subcodigo2
        obj_tercero_Clon.str_subcodigo3 = Me.str_subcodigo3
        obj_tercero_Clon.col_Items = Me.col_Items
        Return obj_tercero_Clon
    End Function

End Class
